package com.glory.brepda.utils;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.pda.platform.ui.ui_pdaplatform.entity.FreeUI_TabIndexGridEntity;

import org.apache.commons.lang3.StringUtils;

import java.util.List;
/**
 * @author hx
 * @date 2019/11/15
 * @desc
 */
public class MyUtils {

    public interface  EditTextActionListener{
        void onKeyDown(String s);
    }

    public static List<FreeUI_TabIndexGridEntity> setPicToDrawable(Context context, List<FreeUI_TabIndexGridEntity> entity) {
        for (FreeUI_TabIndexGridEntity og : entity) {
            if (og.getPicName().length() != 0) {
                Drawable drawable = context.getResources()
                        .getDrawable(context.getResources()
                                .getIdentifier(og.getPicName(), "drawable", context.getPackageName()));
                og.setDrawable(drawable);
            }
        }
        return entity;
    }

    public static void editActionListener(final EditText editText, final EditTextActionListener listener){
        editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                //当actionId == XX_SEND 或者 XX_DONE时都触发
                //或者event.getKeyCode == ENTER 且 event.getAction == ACTION_DOWN时也触发
                if (actionId == EditorInfo.IME_ACTION_SEND
                        || actionId == EditorInfo.IME_ACTION_NEXT
                        || actionId == EditorInfo.IME_ACTION_DONE
                        || (keyEvent != null && KeyEvent.KEYCODE_ENTER == keyEvent.getKeyCode() && KeyEvent.ACTION_DOWN == keyEvent.getAction())) {
                    //处理事件
                    listener.onKeyDown(editText.getText().toString().trim());
                }
                return false;
            }
        });
    }

    /**
     * 批量清理文本框的文本，将文本框的文本清空掉
     * @param textViewList 需要清空文本的 文本框（可变参数），传过来多少可以请多少
     */
    public static void clearTextInTextView(final TextView... textViewList) {
        if (textViewList.length == 0) {
            return;
        }

        if (textViewList.length == 1) {
            textViewList[0].setText(StringUtils.EMPTY);
            return;
        }

        for (TextView textView : textViewList) {
            textView.setText(StringUtils.EMPTY);
        }
    }

    /**
     * 检查所有文本框里面的文本是否有空的
     * @param isCheckVisible 是否检查这个文本框是否可见，可见的才去检查里面的文本是否为空
     * @param textViewList 检查的文本列表
     * @return 布尔值，有空的，true，没有空的，false
     */
    public static boolean checkTextIsEmptyInAnyTextView(boolean isCheckVisible ,final TextView... textViewList) {
        if (textViewList.length == 0) {
            return false;
        }

        for (TextView textView : textViewList) {
            // 没有要检查组件是否有显示的话，默认为有显示
            int visibility = View.VISIBLE;
            // 如果是设定组件显示的时候才去检查文本是否为空的话，获取一下组件的显示属性
            if (isCheckVisible) {
                visibility = textView.getVisibility();
            }
            if (visibility == View.VISIBLE && StringUtils.isEmpty(textView.getText())) {
                return true;
            }
        }

        // 循环检查没有组件有空值的，返回false
        return false;

    }

    /**
     * 清除recycle view 适配器中的数据
     * @param adapter recycle view 适配器
     */
    public static void clearDataInAdapter(BaseQuickAdapter<?, BaseViewHolder> adapter) {

        if (adapter == null) {
            return;
        }

        // 获取适配器中数据数量，后面判断和清除数据用
        int dataSize = adapter.getData().size();
        if (dataSize > 0) {
            adapter.getData().clear();
            adapter.notifyItemRangeRemoved(0, dataSize);
        }
    }

    /**
     * 编辑框获取焦点
     * @param editText 编辑框对象
     */
    public static void editTextRequestFocus(EditText editText) {
        if (editText == null) {
            return;
        }

        new Handler().postDelayed(editText::requestFocus, 50);
    }
}
